package cn.hrbnu.web;


import cn.hrbnu.service.ArticleService;
import cn.hrbnu.util.ResponseResult;
import lombok.Getter;
import org.springframework.web.bind.annotation.*;

@Getter
@RestController
@RequestMapping("/article")
public class ArticleController {

    private final ArticleService articleService;

    public ArticleController(ArticleService articleService) {
        this.articleService = articleService;
    }

    /**
     * 获取热门文章列表
     * <p>
     * 该方法通过调用ArticleService中的hotArticleList方法来获取热门文章列表
     * 主要用于展示最受欢迎或最常被访问的文章
     *
     * @return ResponseResult 包含热门文章列表的响应结果
     */
    @GetMapping("/hotArticleList")
    public ResponseResult<Object> hotArticleList() {

        //调用ArticleService中的hotArticleList方法获取热门文章列表
        //返回包含热门文章列表的响应结果
        return articleService.hotArticleList();
    }

    /**
     * 获取文章列表
     * <p>
     * 该接口用于分页查询文章列表，可以根据类别ID进行筛选
     *
     * @param pageNum  页码，用于指定从哪一页开始查询
     * @param pageSize 每页大小，用于指定每页显示的文章数量
     * @param categoryId 类别ID，用于筛选指定类别的文章，如果为0则不进行类别筛选
     * @return 返回查询结果，包括文章列表及相关信息
     */
    @GetMapping("/articleList")
    public ResponseResult<Object> articleList(Integer pageNum, Integer pageSize, Long categoryId) {
        return articleService.articleList(pageNum, pageSize, categoryId);
    }

    /**
     * 根据文章ID获取文章详情
     * <p>
     * 此方法通过GET请求映射{id}来获取特定文章的详细信息
     * 使用路径变量{id}作为文章的唯一标识符，调用articleService的服务方法获取文章详情
     *
     * @param id 文章的唯一标识符，用于指定需要获取详情的文章
     * @return 返回一个ResponseResult对象，其中包含请求的文章详情
     */
    @GetMapping("/{id}")
    public ResponseResult<Object> getArticleDetail(@PathVariable(value = "id") Long id) {
        return articleService.getArticleDetail(id);
    }

}
